/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-03-10     Hao       the first version
 */
#ifndef APP_CAN_UPPER_TASK_H_
#define APP_CAN_UPPER_TASK_H_

/*
 * 这里，消息结构定义要和要发送的数据结构有关，消息一共有两类：
 *
 * 1. 上位机发给电机的消息
 * 1.1 设置模式
 * 1.2 设置目标值（目前计划如果目标值不变化就不持续发送）
 *
 * 2. 电机上报给上位机的消息
 * 2.1 回复模式设置是否成功
 * 2.2 回复目标值设置是否成功
 * 2.3 持续上报当前控制实际值（跟模式有关，位置模式上报位置、速度模式上报速度、力矩模式上报力矩）
 *
 *
 * 然后规定消息格式：
 * 数据帧、标准帧、数据长度8
 * CAN_ID：11位，高位 3位 表示消息类型（设置模式0、设置目标值1、上报数据2）PS：ID越小优先级越高
 *               接着 4位 数据来源
 *               再接着4位表示数据目标地址。上位机地址都记为0, 电机地址根据电阻选择为:1、2、3、4
 *        如，   上位机 发送给 电机1 设置模式 的消息ID为：000 0000 0001 = 0x001
 *            上位机 发送给 电机2 设置模式 的消息ID为：000 0000 0010 = 0x002
 *            上位机 发送给 电机1 设置目标 的消息ID为：001 0000 0001 = 0x101
 *            上位机 发送给 电机2 设置目标 的消息ID为：001 0000 0010 = 0x102
 *
 *            电机1 发送给 上位机 回复模式设置 的消息ID为：000 0001 0000 = 0x010
 *            电机2 发送给 上位机 回复模式设置 的消息ID为：000 0010 0000 = 0x020
 *            电机3 发送给 上位机 回复模式设置 的消息ID为：000 0011 0000 = 0x030
 *
 *            电机1 发送给 上位机 回复目标设置 的消息ID为：001 0001 0000 = 0x110
 *            电机2 发送给 上位机 回复目标设置 的消息ID为：001 0010 0000 = 0x120
 *            电机3 发送给 上位机 回复目标设置 的消息ID为：001 0011 0000 = 0x130
 *
 *            电机1 发送给 上位机 当前目标值     的消息ID为：002 0001 0000 = 0x210
 *            电机2 发送给 上位机 当前目标值     的消息ID为：002 0010 0000 = 0x220
 *            电机3 发送给 上位机 当前目标值     的消息ID为：002 0011 0000 = 0x230
 *
 *          这里把消息来源和消息目标地都设置四个位，是因为后续可能扩展出电机之间通信，不通过上位机当作中介
 *
 * CAN_DATA:8字节，表示数据内容，低字节在前
 */

#define UPPER_ADDR      0       // 上位机地址
// 消息类型
#define SET_MODE        0       // 设置运行模式
#define SET_TARGET      1       // 设置目标值
#define REPORT_DATA     2       // 上报运行数据

#ifdef __cplusplus
extern "C"{
#endif

void can_upper_task(void *para);

#ifdef __cplusplus
}
#endif

#endif /* APP_CAN_UPPER_TASK_H_ */
